package cn.topcode.unicorn.utils;

import org.springframework.context.MessageSource;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;

/**
 * 国际化辅助工具类
 * 包括文字的国际化处理方法、国际化的文字常量及格式化
 * @author Unicorn Lien
 * 2016年9月16日 下午5:01:10 创建
 */
public class I18nHelper {
    
    public static final String LANGUAGE_CHINESE = "zh-cn";
    public static final String LANGUAGE_ENGLISH = "en";
    
    /**
     * 根据language参数进行国际化
     * 在推送中使用
     * @author Unicorn Lien
     * 2016年9月16日 下午5:03:17 创建
     * @param code   国际化文字的键名（国际化文字常量）
     * @param language  语言（en/zh），空或空字符串默认为zh
     * @param params    文本格式化处理的填充参数
     * @return  国际化结果字符串
     */
    @Deprecated
	public static String getMessage(String code, String language, Object ... params) {
	    return getMessage(code, new Locale(language), params);
    }

	/**
	 * 根据language参数进行国际化
	 * 在推送中使用
	 * @author Unicorn Lien
	 * 2016年9月16日 下午5:03:17 创建
	 * @param code   国际化文字的键名（国际化文字常量）
	 * @param locale  本地化，空或空字符串默认为zh-CN
	 * @param params    文本格式化处理的填充参数
	 * @return  国际化结果字符串
	 */
	public static String getMessage(String code, Locale locale, Object ... params) {
		if(StringUtil.isBlank(code)) throw new IllegalArgumentException("国际化文字键名不能为空");
		if(locale == null) locale = Locale.CHINA;
		MessageSource messageSource = SpringContextHolder.getBean(MessageSource.class);
		if(messageSource != null) {
			return messageSource.getMessage(code, params, locale);
		}else {
			ResourceBundle resourceBundle = ResourceBundle.getBundle("i18n/messages",locale);
			if (resourceBundle.containsKey(code)) {
				String pattern = resourceBundle.getString(code);
				return MessageFormat.format(pattern, params);
			}
		}
		return code;
	}

}
